package app.monitor;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import org.hyperic.sigar.CpuPerc;
import org.hyperic.sigar.Mem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import app.monitor.bean.CpuBean;
import htby.utils.IOTSUtils;

public class MonitorController {

	private static Logger logger = LoggerFactory.getLogger(MonitorController.class);

	public static void main(String[] args) throws Exception {
		Timer timer = new Timer();
		// 10秒后开始执行，每分钟执行一次
		timer.schedule(new MonitorTimer(), IOTSUtils.MONITOR_TIMER_DELAY_TIME, IOTSUtils.MONITOR_TIMER_INTERVAL_TIME);
	}

	/**
	 * CPU资源信息 CPU数量（单位：个）
	 * 
	 * @author lfy.xys
	 * @date 2018年5月2日
	 *
	 * @throws SigarException
	 */
	public void setCpuCount() throws SigarException {
		Sigar sigar = new Sigar();
		try {
			int length = sigar.getCpuInfoList().length;
			IOTSUtils.sysBean.setCpuLength(length);
			logger.debug("CPU个数：{}", length);
		} finally {
			sigar.close();
		}
	}

	/**
	 * CPU的用户使用量、系统使用剩余量、总的剩余量、总的使用占用量等（单位：100%）
	 * 
	 * @author lfy.xys
	 * @date 2018年5月2日
	 *
	 */
	public void setCpuPerc() {
		Sigar sigar = new Sigar();
		// 不管是单块CPU还是多CPU都适用
		CpuPerc cpuList[] = null;
		try {
			cpuList = sigar.getCpuPercList();
		} catch (SigarException e) {
			logger.error("获取cpu报错。");
			e.printStackTrace();
			return;
		}

		List<CpuBean> cpuBeans = new ArrayList<CpuBean>();

		for (int i = 0; i < cpuList.length; i++) {
			String cpuUsed = CpuPerc.format(cpuList[i].getCombined());
			CpuBean cpuBean = new CpuBean();
			cpuBean.setId(i + 1);
			cpuBean.setCpuUsed(cpuUsed);
			cpuBeans.add(cpuBean);
			logger.debug("第{}块cpu,使用率:{}", i + 1, cpuUsed);
		}
		IOTSUtils.sysBean.setCputBeans(cpuBeans);
	}

	/**
	 * 内存资源信息
	 * 
	 * @author lfy.xys
	 * @date 2018年5月2日
	 *
	 */
	public void setPhysicalMemory() {
		// a)物理内存信息
		DecimalFormat df = new DecimalFormat("#0.00");
		Sigar sigar = new Sigar();
		Mem mem;
		try {
			mem = sigar.getMem();
			String totalMemory = df.format((float) mem.getTotal() / 1024 / 1024 / 1024);
			IOTSUtils.sysBean.setTotalMemory(totalMemory);
			String usedMemory = df.format((float) mem.getUsed() / 1024 / 1024 / 1024);
			IOTSUtils.sysBean.setUsedMemory(usedMemory);
			logger.debug("内存总量：{}G,当前内存使用量：{}G", totalMemory, usedMemory);
		} catch (SigarException e) {
			e.printStackTrace();
		}
	}

}
